package router

import (
	"github.com/gin-gonic/gin"

	"hrms-api/handler"
	"hrms-api/middleware"
)

// RegisterRoutes 注册所有路由
func RegisterRoutes(e *gin.Engine) {
	// API v1 分组
	v1 := e.Group("/api/v1")

	// 无需认证的公开路由
	public := v1.Group("")
	{
		// 用户认证相关
		auth := public.Group("/auth")
		{
			auth.POST("/login", handler.Login)       // 登录
			auth.POST("/register", handler.Register) // 注册
		}
	}

	// 需要认证的路由
	protected := v1.Group("", middleware.Auth())
	{
		// 用户相关
		user := protected.Group("/users")
		{
			user.GET("/me", handler.GetUserInfo)             // 获取当前用户信息
			user.PUT("/me", handler.UpdateUserInfo)          // 更新当前用户信息
			user.PUT("/me/password", handler.UpdatePassword) // 修改密码
			user.GET("/me/roles", handler.GetUserRoles)      // 获取当前用户角色
		}

		// 考勤管理
		attendance := protected.Group("/attendance")
		{
			attendance.POST("/check-in", handler.CheckIn)            // 签到
			attendance.POST("/check-out", handler.CheckOut)          // 签退
			attendance.GET("/today", handler.GetTodayAttendance)     // 获取今日考勤
			attendance.GET("/history", handler.GetAttendanceHistory) // 获取考勤历史
			attendance.POST("/leave", handler.ApplyLeave)            // 申请请假
		}

		// 部门管理
		department := protected.Group("/departments")
		{
			department.GET("", handler.GetDepartments)          // 获取部门列表
			department.POST("", handler.CreateDepartment)       // 创建部门
			department.GET("/:id", handler.GetDepartment)       // 获取部门详情
			department.PUT("/:id", handler.UpdateDepartment)    // 更新部门
			department.DELETE("/:id", handler.DeleteDepartment) // 删除部门
		}

		// 招聘管理
		recruitment := protected.Group("/recruitment")
		{
			recruitment.GET("", handler.ListRecruitments)         // 获取招聘列表
			recruitment.POST("", handler.CreateRecruitment)       // 发布招聘
			recruitment.GET("/:id", handler.GetRecruitment)       // 获取招聘详情
			recruitment.PUT("/:id", handler.UpdateRecruitment)    // 更新招聘
			recruitment.DELETE("/:id", handler.DeleteRecruitment) // 删除招聘

			// 简历投递相关
			recruitment.POST("/apply", handler.ApplyRecruitment)     // 投递简历
			recruitment.GET("/candidates", handler.ListCandidates)   // 获取应聘者列表
			recruitment.POST("/interview", handler.ArrangeInterview) // 安排面试
		}

		// 薪资管理
		salary := protected.Group("/salary")
		{
			salary.GET("/me", handler.GetMySalary)             // 获取个人薪资
			salary.GET("/history", handler.GetSalaryHistory)   // 获取薪资历史
			salary.POST("/calculate", handler.CalculateSalary) // 计算薪资（HR）
			salary.POST("/confirm", handler.ConfirmSalary)     // 确认发放（HR）
			salary.GET("", handler.ListSalaries)               // 获取薪资列表（HR）
			salary.GET("/:id", handler.GetSalary)              // 获取薪资详情（HR）
			salary.PUT("/:id", handler.UpdateSalary)           // 更新薪资信息（HR）
			salary.DELETE("/:id", handler.DeleteSalary)        // 删除薪资记录（HR）
		}

		// 培训管理
		training := protected.Group("/trainings")
		{
			// 基础CRUD
			training.GET("", handler.ListTrainings)         // 培训列表（带分页和筛选）
			training.POST("", handler.CreateTraining)       // 创建培训（仅HR/管理员）
			training.GET("/:id", handler.GetTrainingDetail) // 培训详情
			training.PUT("/:id", handler.UpdateTraining)    // 更新培训（仅HR/管理员）

			// 状态变更
			training.POST("/:id/publish", handler.PublishTraining) // 发布培训
			training.POST("/:id/cancel", handler.CancelTraining)   // 取消培训

			// 报名
			training.POST("/:id/enroll", handler.EnrollTraining) // 报名培训
		}

		// 用户角色管理
		userRole := protected.Group("/user-roles")
		{
			userRole.POST("", handler.AssignUserRole)       // 分配用户角色
			userRole.DELETE("/:id", handler.RemoveUserRole) // 移除用户角色
			userRole.GET("", handler.ListUserRoles)         // 获取用户角色列表
			userRole.GET("/:id", handler.GetUserRole)       // 获取用户角色详情
		}

		// 面试管理
		interview := protected.Group("/interviews")
		{
			interview.POST("", handler.CreateInterview)                 // 创建面试
			interview.GET("", handler.ListInterviews)                   // 获取面试列表
			interview.GET("/:id", handler.GetInterview)                 // 获取面试详情
			interview.PUT("/:id", handler.UpdateInterview)              // 更新面试信息
			interview.DELETE("/:id", handler.DeleteInterview)           // 删除面试记录
			interview.POST("/:id/feedback", handler.AddFeedback)        // 添加面试反馈
			interview.POST("/:id/complete", handler.CompleteInterview)  // 完成面试
			interview.PUT("/:id/status", handler.UpdateInterviewStatus) // 更新面试状态
		}

		// 员工管理
		employee := protected.Group("/employees")
		{
			employee.GET("", handler.ListEmployees)         // 获取员工列表
			employee.POST("", handler.CreateEmployee)       // 创建员工记录
			employee.GET("/:id", handler.GetEmployee)       // 获取员工详细信息
			employee.PUT("/:id", handler.UpdateEmployee)    // 更新员工信息
			employee.DELETE("/:id", handler.DeleteEmployee) // 删除员工记录
		}

		// 公告管理
		notice := protected.Group("/notices")
		{
			notice.GET("", handler.GetNotices)          // 获取公告列表
			notice.POST("", handler.CreateNotice)       // 创建公告
			notice.GET("/:id", handler.GetNotice)       // 公告详情
			notice.PUT("/:id", handler.UpdateNotice)    // 更新公告
			notice.DELETE("/:id", handler.DeleteNotice) // 删除公告
		}
	}
}
